/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package almacenamiento;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
/**
 *
 * @author user
 */
public class Relacion implements java.io.Serializable, Iterable<Atributo>{
    
    //Lista de atributos
    private List<Atributo> atributos;
    
    //CONSTRUCTORES
    public Relacion(){
        atributos=new ArrayList<Atributo>();
    }
    
public Relacion(List<Atributo> atributos) { 
    this.atributos = new ArrayList<Atributo>(atributos); 
} 

/** * AÃ±adir un atributo a la relaciÃ³n. * * @param atributo, atributo a ser aÃ±adido. */ 
public void adicionarAtributo(Atributo atributo) { 
    atributos.add(atributo); 
}
public void eliminarAtributo(String atributo) { 
    int i=getIndiceAtributo(atributo);
    if (i>=0){
        atributos.remove(i); 
    }
}

/** * Devuelve el numero de atributos de la relaciÃ³n. * * @return numero de atributos de una <code>RelaciÃ³n</code> */ 
public int getNumeroDeAtributos() { 
    return atributos.size(); 
} 

/** * Devuelve un <code>Iterator</code> sobre los atributos de la * relaciÃ³n. *
 * @return <code>Iterator</code> de Atributos de la <code>RelaciÃ³n</code>. * */ 
@Override public Iterator<Atributo> iterator() { 
    return atributos.iterator(); 
} 

/** * Devuelve un atributo especifico de la relaciÃ³n. * 
 * @param i el indice del atributo que serÃ¡ devuelto. * @return el atributo especificaco. */ 
public Atributo getAtributo(int i) { 
    return atributos.get(i); 
}

/** * Dado el nombre de un atributo, se devuelve el Ã­ndice de este atributo * en el esquema de la relaciÃ³n. 
Se devuelve <code>-1</code> si el atributo * no aparece en el esquema de la relaciÃ³n. * 
* @param atr el nombre del atributo * @return el indice del atributo en el esquema de la relaciÃ³n, 
* <code>-1</code> si el atributo no aparece en el esquema de la relaciÃ³n. */ 
public int getIndiceAtributo(String atr) { 
    int i = 0; 
    for (Atributo atributo : atributos) { 
        if (atributo.getNombre().equals(atr)) { 
            return i; 
        } 
        i++;
    } 
    return -1; 
} 

// getIndiceAtributo() 

/** * RepresentaciÃ³n textual de una relaciÃ³n. */ 
@Override public String toString() { 
    StringBuilder sb = new StringBuilder(); 
    sb.append("{"); 
    for (int i = 0; i < getNumeroDeAtributos() - 1; i++) { 
        sb.append(getAtributo(i)).append(", \n"); 
    } 
    sb.append(getAtributo(getNumeroDeAtributos() - 1)).append("}"); 
    return sb.toString(); 
} // toString()    
}
